/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import controller.Conexao;
import controller.ContaPagar;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Alcivando
 */
public class ContaPagarDAO {

    ContaPagar conta = new ContaPagar();
    private Connection connection;

    public ContaPagarDAO() throws Exception {
        this.connection = Conexao.getConnection();

    }

    public int retornaProximoID() throws Exception {
        ArrayList<Integer> codigo = new ArrayList<Integer>();
        // cria um parametro com a consulta para pegar o proximo codigo a ser usado
        String consultaId = "SELECT max(\"codConta\") from \"contaPagar\";";
        // efetua e retorna a consultaId
        ResultSet rs = connection.createStatement().executeQuery(consultaId);
        //adiciona o codigo a lista
        while (rs.next()) {
            codigo.add(rs.getInt("max") + 1);
        }
        return codigo.get(0);
    }

    public void adiciona(ContaPagar contaPagar) throws Exception {


        contaPagar.setCodConta(retornaProximoID());

        // insere os dados do cliente com a conexao para o banco de dados.
        String sql = "insert into \"contaPagar\" values (?,?,?,?,?)";
        PreparedStatement stmt = connection.prepareStatement(sql);

        stmt.setInt(1, contaPagar.getCodConta());
        stmt.setInt(2, contaPagar.getCodFornecedor());
        stmt.setDouble(3, contaPagar.getValorParcela());
        stmt.setInt(4, contaPagar.getnParcela());
        stmt.setString(5, contaPagar.getVencimento());

        // busca os campos preenchidos na classe de Clientes.

        stmt.execute();
        stmt.close();
    }

    public ContaPagar retornarContaPorCodFonecedor(int cod) throws SQLException {

        //insere os dados do cliente com a conexao para o banco de dados.
        String sql = "SELECT * FROM \"contaPagar\" WHERE \"codFornecedor\" = ?;";
        PreparedStatement stmt = connection.prepareStatement(sql);

        stmt.setInt(1, cod);

        ResultSet rs = stmt.executeQuery();

        ContaPagar f = new ContaPagar();

        while (rs.next()) {

            f.setCodFornecedor(rs.getInt("codFornecedor"));
            f.setValorParcela(rs.getDouble("valorParcela"));
            f.setVencimento(rs.getString("vencimento"));
            f.setnParcela(rs.getInt("nParcelas"));

        }
        // busca os campos preenchidos na classe de Clientes.

        stmt.close();

        return f;


    }

    public void remover(ContaPagar conta) throws Exception {
        PreparedStatement comando;
        try {
            String sql = "DELETE FROM \"contaPagar\" WHERE \"codConta\"=?";
            comando = connection.prepareStatement(sql);
            comando.setInt(1, conta.getCodConta());
            comando.execute();
            JOptionPane.showMessageDialog(null, "Removido com sucesso!", "Remorção Concluído", 1);
            comando.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void pagarParcela(int codFornecedor) {
        PreparedStatement comando;
        try {
            String sql = "update \"contaPagar\" set \"nParcelas\" = \"nParcelas\" - 1 where \"codFornecedor\" = ?";
            comando = connection.prepareStatement(sql);
            comando.setInt(1, codFornecedor);
            comando.execute();
            comando.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
